package com.jctrip.hotel.source.service.greentree;

import com.jctrip.hotel.source.model.OrderDataResult;
import com.jctrip.hotel.source.model.PriceCheckParam;
import com.jctrip.hotel.source.model.atour.req.CreateOrderReq;
import com.jctrip.hotel.source.model.greentree.req.*;
import com.jctrip.hotel.source.model.greentree.resp.*;
import com.jctrip.hotel.source.model.wehotel.req.OrderData;

import java.util.List;

/**
 * @Author：Haruhi
 * @description:
 * @Date：2023/8/30 22:15
 * @Package：com.jctrip.hotel.source.service.greentree
 * @Project：hotel-main
 */
public interface GreenTreeService {
    String parseHotelId(String innId);

    String parseInnId(String hotelId);

    /**
     *  获取所有酒店编号及名称
     */
    GetAllHotelInfoResp getAllHotelInfo(GetAllHotelInfoReq getAllHotelInfoReq);

    /**
     *  获取酒店信息
     */
    GetHotelInfoResp getHotelInfo(GetHotelInfoReq getHotelInfoReq);

    /**
     * 根据酒店编号获取酒店详细信息(包括品牌)
     */
    GetHotelInfoByCodeResp getHotelInfoByCode(String hotelId);

    /**
     *  获取酒店所有房型
     */
    GetRoomTypeListResp getRoomTypeList(GetRoomTypeListReq getRoomTypeListReq);

    /**
     *  获取酒店房态
     */
    GetAllRoomCountAndPriceResp getAllRoomCountAndPrice(GetAllRoomCountAndPriceReq getAllRoomCountAndPriceReq);

    /**
     *  下单校验
     */
    BookingCheckResp bookingCheck(BookingCheckReq bookingCheckReq);

    /**
     *  查找预定状态
     */
    SearchBookingResp searchBooking(SearchBookingReq searchBookingReq);

    /**
     *  中台查找预定状态
     */
    OrderData queryOrderData(SearchBookingReq searchBookingReq);
    /**
     *  中台调用下单，容差判断
     */
    OrderDataResult postOrder(CreateBookingReq createOrderReq, PriceCheckParam priceCheck);
    /**
     *  正价下单
     */
    CreateBookingResp createBooking(CreateBookingReq createBookingReq);

    /**
     *  取消订单
     */
    CancelBookingResp cancelBooking(CancelBookingReq cancelBookingReq);

    /**
     *  获取酒店早餐信息
     */
    GetBreakfastInfoResp getBreakfastInfo(GetBreakfastInfoReq getBreakfastInfoReq);

    /**
     * 获取酒店所有活动房型
     */
    GetActivityRoomListResp getActivityRoomList(GetActivityRoomListReq getActivityRoomListReq);

    /**
     * 获取酒店所有活动房价房量（活动全量
     */
    GetAllRoomCountAndPriceActivityResp getAllRoomCountAndPriceActivity(GetAllRoomCountAndPriceActivityReq getAllRoomCountAndPriceActivityReq);

    /**
     * 查询酒店活动房型房量房价是否可用（活动下单前校验）
     */
    BookingCheckActivityResp bookingCheckActivity(BookingCheckActivityReq bookingCheckActivityReq);

    /**
     * 活动房型下单
     */
    CreateBookingActivityResp createBookingActivity(CreateBookingActivityReq createBookingActivityReq);

    /**
     *  获取酒店所有协议房价房量（协议全量)
     */
    GetAgreementPriceResp getAgreementPrice(GetAgreementPriceReq getAgreementPriceReq);

    /**
     *  查询酒店房型是否可用（协议下单前校验）
     */
    BookingCheckAgreementResp bookingCheckAgreement(BookingCheckAgreementReq bookingCheckAgreementReq);

    /**
     * 酒店预定(协议)
     */
    CreateBookingAgreementResp createBookingAgreement(CreateBookingAgreementReq createBookingAgreementReq);
    /**
     *  中台调用协议下单，容差判断
     */
    OrderDataResult postAgreementOrder(CreateBookingAgreementReq createBookingAgreementReq, PriceCheckParam priceCheck, Integer breakfastCount, String bookId);

    /**
     *  中台调用活动下单，容差判断
     */
    OrderDataResult postActivityOrder(CreateBookingActivityReq createBookingActivityReq, PriceCheckParam priceCheck, Integer breakfastCount, String bookId);

}
